package com.akkainaction.helloactor.become.actor;

import akka.actor.UntypedActor;
import akka.japi.Procedure;
import com.akkainaction.helloactor.become.po.Emp;

public class SimpleActor extends UntypedActor {

    @Override
    public void onReceive(Object msg) {
        System.out.println(msg);
        if (msg instanceof String) {
            if ("1".equals(msg)) {
                getContext().become(LEVEL1);
            } else if ("2".equals(msg)) {
                getContext().become(LEVEL2);
            }
        } else {
            unhandled(msg);
        }
    }

    Procedure<Object> LEVEL3 = msg -> {
        if (msg instanceof String) {
            if ("end".equals(msg)) {
                getContext().unbecome();
            }
        } else if (msg instanceof Emp) {
            Emp emp = (Emp) msg;
            double result = emp.getSalary() * 1.4;
            System.out.println(emp.getName() + "的奖金是" + result);
        }
    };

    Procedure<Object> LEVEL1 = msg -> {
        if (msg instanceof String) {
            if ("end".equals(msg)) {
                getContext().unbecome();
            } else if("become3".equals(msg)){
                getContext().become(LEVEL3,false);
            }
        } else if (msg instanceof Emp) {
            Emp emp = (Emp) msg;
            double result = emp.getSalary() * 1.8;
            System.out.println(emp.getName() + "的奖金是" + result);
        }
    };

    Procedure<Object> LEVEL2 = msg -> {
        if (msg instanceof String) {
            if ("end".equals(msg)) {
                getContext().unbecome();
            }
        } else if (msg instanceof Emp) {
            Emp emp = (Emp) msg;
            double result = emp.getSalary() * 1.5;
            System.out.println(emp.getName() + "的奖金是" + result);
        }
    };
}
